package com.yunpeng.aidevice.dao.service;

import com.yunpeng.aidevice.dao.model.entity.FunctionNodeDO;
import com.yunpeng.aidevice.dao.model.relation.FunctionsNodeRelationPermissionsDO;

import java.util.List;

/**
 * IFunctionNodeService 功能节点服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-10
 */
public interface IFunctionNodeService {
    /**
     * 根据节点代码获取节点对象
     *
     * @param nodeCode 节点代码
     * @return
     */
    FunctionNodeDO getByCode(String nodeCode);

    /**
     * 获取实时的用户可操作的功能集合
     *
     * @param userCode
     * @return
     */
    List<FunctionNodeDO> getUserFunctionPermissionList(String userCode);

    /**
     * 获取功能菜单文件夹
     *
     * @return
     */
    List<FunctionNodeDO> getFolder();

    /**
     * 新增功能节点
     *
     * @param name         功能名称
     * @param url          路径url
     * @param folder       是否文件夹
     * @param parentCode   父节点代码
     * @param operatorCode 操作人代码
     * @return
     */
    Boolean addNew(String name, String url, Boolean folder, String parentCode, String operatorCode);

    /**
     * 删除功能节点
     *
     * @param functionNodeCode 功能节点代码
     * @return
     */
    Boolean remove(String functionNodeCode);

    /**
     * 获取所有功能节点列表数据
     * 限制在1000条以内
     *
     * @return
     */
    List<FunctionNodeDO> queryAllList();

    /**
     * 功能节点绑定权限
     *
     * @param nodeCode        功能节点代码
     * @param permissionCodes 权限代码集合
     * @param operatorCode    操作人代码
     * @return
     */
    Boolean bindPermission(String nodeCode, List<String> permissionCodes, String operatorCode);

    /**
     * 根据功能节点代码查询关联集合
     *
     * @param nodeCode 功能节点代码
     * @return
     */
    List<FunctionsNodeRelationPermissionsDO> queryRelationListByNodeCode(String nodeCode);
}
